/**
 * Created by cc
 * Description:
 * User: CZH
 * Date: 2022-09-12
 * Time: 12:41
 */
public class TestDemo {



    //递归求 N 的阶乘 3!=1*2*3*4*5
    public static int fac(int n) {
        if (n == 1) {
            return n;
        }
        return n * fac(n - 1);
    }
    public static void main(String[] args) {
        System.out.println(fac(5));
    }



    //递归求 1 + 2 + 3 + ... + 10
//    public static int sumNum(int n) {
//        if (n == 1) {
//            return n;
//        }
//        return n + sumNum(n - 1);
//    }
//    public static void main(String[] args) {
//        int num = 10;
//        System.out.println(sumNum(num));
//    }


    //按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
//    public static void print(int n) {
//        if (n < 10) {
//            System.out.print(n + " ");
//            return;
//        }
//        print(n / 10);
//        System.out.print((n % 10) + " ");
//    }
//    public static void main(String[] args) {
//        int num = 1234;
//        print(num);
//    }


    //写一个递归方法，输入一个非负整数，返回组成它的数字之和
//    public static int NumSum(int n) {
//        if (n < 10) {
//            return n;
//        }
//        return NumSum(n / 10) + n % 10;
//    }
//    public static void main(String[] args) {
//        int num = 1579;
//        System.out.println(NumSum(num));
//    }



    //递归求斐波那契数列的第 N 项
    //1 1 2 3 5 8 13
//    public static int fib(int n) {
//        if (n < 3) {
//            return 1;
//        }
//        return fib(n-1) + fib(n-2);
//    }
//    public static void main(String[] args) {
//        int num = 7;
//        System.out.println(fib(num));
//    }



    //递归求解汉诺塔问题
//    public static void move(char post1, char post2) {
//        System.out.println(post1 + " -> " + post2);
//    }
//    /**
//     *
//     * @param n 要移动的盘子个数
//     * @param post1 起始柱子
//     * @param post2 中转柱子
//     * @param post3 目的地柱子
//     */
//    public static void hanoiTower(int n, char post1, char post2, char post3) {
//        if (n == 1) {
//            move(post1, post3);
//        }else {
//            hanoiTower(n - 1, post1, post3, post2);
//            move(post1, post3);
//            hanoiTower(n - 1, post2, post1, post3);
//        }
//    }
//    public static void main(String[] args) {
//        int num = 3;
//        hanoiTower(num, 'A','B','C');
//    }



//    //青蛙跳台阶问题
//    //1-1 2-2 3-3
//    public static int frog(int n){
//        if (n < 3) {
//            return n;
//        }
//        return frog(n-1) + frog(n-2);
//    }
//    public static void main(String[] args) {
//        int num = 10;
//        System.out.println(frog(num));
//    }


    //在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。
    // 并执行代码，求出结果
//    public static double NumSum(double x, double y, double z){
//        return x + y + z;
//    }
//    public static int NumSum(int x, int y){
//        return x + y;
//    }
//    public static void main(String[] args) {
//        int a1 = 10;
//        int b1 = 20;
//        double a2 = 1.0;
//        double b2 = 2.0;
//        double c2 = 3.0;
//        System.out.println(NumSum(a1, b1));
//        System.out.println(NumSum(a2, b2, c2));
//    }



    //在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，
    // 还可以求3个小数的最大值？
//    public static double FindMaxNum(double x, double y, double z){
//        double num = (x > y ? x : y);
//        return num > z ? num : z;
//    }
//    public static int FindMaxNum(int x, int y){
//        return x > y ? x : y;
//    }
//    public static void main(String[] args) {
//
//    }



    //创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
    //
    //​ 要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
//    public static int max3(int x, int y, int z){
//        int max2Num = max2(x,y);
//        return max2Num > z ? max2Num : z;
//    }
//    public static int max2(int x, int y){
//        return x > y ? x : y;
//    }
//    public static void main(String[] args) {
//        int a = 10;
//        int b = 20;
//        int c = 30;
//        System.out.println(max2(a, b));
//        System.out.println(max3(a, b, c));
//    }



    //调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
    //如数组：[1,2,3,4,5,6]
    //调整后可能是：[1, 5, 3, 4, 2, 6]
//    public static void adjust(int[] arr){
//        //奇数
//        for (int i = 0; i < arr.length; i++){
//            if (arr[i] % 2 == 1) {
//                System.out.print(arr[i] + " ");
//            }
//        }
//        //偶数
//        for (int i = 0; i < arr.length; i++){
//            if (arr[i] % 2 == 0) {
//                System.out.print(arr[i] + " ");
//            }
//        }
//    }
//    public static void main(String[] args) {
//        int[] array = {1,2,3,4,5,6};
//        adjust(array);
//    }



    //求1！+2！+3！+4！+........+n!的和
//    public static int factorialSum(int n){
//         int sum = 0;
//         for (int i = 1; i <= n; i++){
//             int count = 1;
//             for (int j = 1; j <= i; j++){
//                 count *= j;
//             }
//             sum += count;
//         }
//         return sum;
//    }
//    public static void main(String[] args) {
//        int num = 5;
//        System.out.println(factorialSum(num));
//    }



    //求 N 的阶乘 / 1*2*3*4*5
//    public static int factorial(int n){
//        int sum = 1;
//        for (int i = 1; i <= n; i++){
//            sum *= i;
//        }
//        return sum;
//    }
//    public static void main(String[] args) {
//        int num = 5;
//        System.out.println(factorial(5));
//    }



    //求斐波那契数列的第n项。(迭代实现)
//    public static int fib(int n){
//        if (n < 3) {
//            return 1;
//        }
//        return fib(n-1) + fib(n-2);
//    }
//    public static void main(String[] args) {
//        int num = fib(6);
//        System.out.println(num);
//    }



    //有一组数据，只有一个数字是出现一次，其他是两次，请找出这个数字。
//    public static int findNum(int[] arr){
//        for (int i = 0; i < arr.length; i++){
//            int count = 0;
//            for (int j = 0; j < arr.length; j++){
//                if (arr[i] == arr[j])
//                    count++;
//            }
//            if (1 == count) {
//                return arr[i];
//            }
//        }
//        return -1;
//    }
//    public static void main(String[] args) {
//        int[] arr = {1,2,3,1,2,3,4,5,6,5,6,4,9,5,3,8,6,9};
//        int key = findNum(arr);
//        System.out.println(key);
//    }

}
